--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit de5ee9c132bcc8718ee8aaa37a48285f6733bcf1
Parents : ed840cd
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-03-31T03:00:41+03:00
feat(e2e): add script to start E2E stack with MeshChat backend and Vite
Changes
Diff
diff --git a/scripts/e2e/start-e2e-stack.sh b/scripts/e2e/start-e2e-stack.sh
new file mode 100755
index 00000000..0620f651
--- /dev/null
+++ b/scripts/e2e/start-e2e-stack.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+cd "$ROOT"
+
+BACKEND_PORT="${E2E_BACKEND_PORT:-8000}"
+VITE_HOST="${E2E_VITE_HOST:-127.0.0.1}"
+VITE_PORT="${E2E_VITE_PORT:-5173}"
+
+TMPDIR="$(mktemp -d -t meshchat-e2e-XXXXXX)"
+export MESHCHAT_LOG_DIR="$TMPDIR/logs"
+mkdir -p "$MESHCHAT_LOG_DIR"
+
+cleanup() {
+ if [[ -n "${BACK_PID:-}" ]] && kill -0 "$BACK_PID" 2>/dev/null; then
+ kill "$BACK_PID" 2>/dev/null || true
+ wait "$BACK_PID" 2>/dev/null || true
+ fi
+ rm -rf "$TMPDIR"
+}
+
+trap cleanup EXIT INT TERM
+
+echo "E2E: starting MeshChat backend on 127.0.0.1:${BACKEND_PORT} (isolated storage under ${TMPDIR})"
+
+poetry run python -m meshchatx.meshchat \
+ --headless \
+ --no-https \
+ --host 127.0.0.1 \
+ --port "${BACKEND_PORT}" \
+ --storage-dir "$TMPDIR/storage" \
+ --reticulum-config-dir "$TMPDIR/rns" \
+ &
+BACK_PID=$!
+
+echo "E2E: waiting for /api/v1/status (HTTP 200)..."
+ready=0
+for i in $(seq 1 240); do
+ if ! kill -0 "$BACK_PID" 2>/dev/null; then
+ echo "E2E: backend process exited before becoming ready"
+ exit 1
+ fi
+ if curl -sf "http://127.0.0.1:${BACKEND_PORT}/api/v1/status" >/dev/null 2>&1; then
+ ready=1
+ echo "E2E: backend ready after ${i}s"
+ break
+ fi
+ sleep 1
+done
+
+if [[ "$ready" -ne 1 ]]; then
+ echo "E2E: backend did not respond on :${BACKEND_PORT} within 240s"
+ exit 1
+fi
+
+echo "E2E: starting Vite on ${VITE_HOST}:${VITE_PORT}"
+pnpm exec vite --host "${VITE_HOST}" --port "${VITE_PORT}" &
+VITE_PID=$!
+wait "$VITE_PID"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────